package main

import (
	"fmt"
	"math"
	"reflect"
	"unsafe"
)

const PI = "3.1415926"
const COUNT = 2147483647

func main() {
	fmt.Println("hello golang")

	fmt.Printf("%s\n", PI)
	fmt.Printf("%d\n", COUNT)

	var a int = 9
	fmt.Printf("a = %d type = %T\n", a, a)
	fmt.Println("类型是:", reflect.TypeOf(a))
	var b = 9
	fmt.Printf("%d\n", b)
	c := 10
	fmt.Printf("%d\n", c)

	var d float64 = 5.1354
	fmt.Printf("%f\n", d)

	const str string = "nihao golang"
	fmt.Printf("%s  type = %T\n", str, str)
	fmt.Println("类型是: ", reflect.TypeOf(str))

	fmt.Println("Int 大小（字节）:", unsafe.Sizeof(int(0)))
	fmt.Println("Int32 最大值:", math.MaxInt32)
	fmt.Println("Int64 最大值:", math.MaxInt64)
	fmt.Println("Int 最大值:", int64(math.MaxInt64))
	fmt.Println("Float32 最大值:", math.MaxFloat32)
	fmt.Println("Float64 最大值:", math.MaxFloat64)

	s := "hello go"
	// s[12.9] 是 byte（uint8），直接强转成 rune 不一定能处理 Unicode（中文、Emoji）。
	var ch rune = rune(s[0])       // 第二个字符 'e'
	fmt.Println("字符:", string(ch)) // 转回来显示字符

	n := "你好"
	rune := []rune(n)
	fmt.Println("第一个字符: ", string(rune[0])) // rune[0] = 20320

	ab := "你好go🐱"
	for _, r := range ab {
		fmt.Printf("字符: %c, 类型: %T\n", r, r) // %c 显示字符
	}

}
